#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

#define N 5

void Runchild()
{
    int cnt = 5;
    //while(cnt--)
    while(1)//如果子进程不死呢
    {
        printf("i am child,pid:%d ,ppid:%d \n",getpid(),getppid());
        sleep(1);
    }
}

int main()
{
    int i = 0;
    for(;i<N;++i)
    {
        pid_t id = fork();
        if(id == 0)
        {
            Runchild();
            exit(0);
        }
        printf("creat child process success:%d \n",id);
    }

//不等待
 //   sleep(10);//5只僵尸存在10s

    //wait -- 一次只能等一个
    //但我们现在有5个子进程
    for(i = 0;i < N;i++)
    {
        pid_t id = wait(NULL);
        if(id > 0)
        {
            printf("wait %d success\n",id);
        }
    }
    sleep(5);

    return 0;
}

//int main()
//{
//    pid_t id = fork();
//    if(id < 0){
//        perror("fork");
//        return 1;
//    }
//    else if(id == 0){
//        //child
//        int cnt = 5;
//        while(cnt--){
//            printf("i am child:cnt:%d , pid:%d ,ppid:%d \n",cnt,getpid(),getppid());
//            sleep(1);
//        }
//
//        exit(0);//只想让子进程完成else if这部分内容
//    }
//    else{
//        int cnt = 10;
//        //parent
//        while(cnt--){
//            printf("i am parent:cnt:%d ,  pid:%d ,ppid:%d \n",getpid(),getppid());
//            sleep(1);
//        }
//        //到目前为止，进程等待是必须的
//        //如果有多个子进程，wait等待任意一个子进程
//
//        pid_t ret = wait(NULL);
//        if(ret == id)
//        {
//            printf("wait success, ret: %d\n",ret);
//        }
//
//        sleep(5);
//    }
//
//    return 0;
//}
